package com.chhuang.ewcrm.service;

import com.chhuang.ewcrm.entity.EWarehouse;
import com.github.pagehelper.PageInfo;

import java.util.List;

/**
 * (EWarehouse)表服务接口
 *
 * @author chhuang
 * @since 2020-11-10 12:38:34
 */
public interface EWarehouseService {

    /**
     * 通过ID查询单条数据
     *
     * @param warehouseId 主键
     * @return 实例对象
     */
    EWarehouse queryById(String warehouseId);

    /**
     * 通过多个ID查询多条数据
     *
     * @param list<EWarehouse> 主键列表
     * @return 对象列表
     */
    List<EWarehouse> queryByIds(List<String> list);

    /**
     * 通过实体作为筛选条件查询
     *
     * @param eWarehouse 实例对象
     * @return 对象列表
     */
    List<EWarehouse> query(EWarehouse eWarehouse);

    /**
     * 通过实体作为筛选条件查询,支持排序
     *
     * @param eWarehouse 实例对象
     * @return 对象列表
     */
    List<EWarehouse> query(EWarehouse eWarehouse, String orderBy);

    /**
     * 通过实体作为筛选条件查询,支持分页
     *
     * @param eWarehouse 实例对象
     * @return pageInfo对象
     */
    PageInfo<EWarehouse> query(EWarehouse eWarehouse, Integer pageNum, Integer pageSize);

    /**
     * 通过实体作为筛选条件查询,支持分页和排序
     *
     * @param eWarehouse 实例对象
     * @return pageInfo对象
     */
    PageInfo<EWarehouse> query(EWarehouse eWarehouse, Integer pageNum, Integer pageSize, String orderBy);

    /**
     * 通过实体作为筛选条件模糊查询
     *
     * @param eWarehouse 实例对象
     * @return 对象列表
     */
    List<EWarehouse> queryLike(EWarehouse eWarehouse);

    /**
     * 通过实体作为筛选条件模糊查询,支持排序
     *
     * @param eWarehouse 实例对象
     * @return 对象列表
     */
    List<EWarehouse> queryLike(EWarehouse eWarehouse, String orderBy);

    /**
     * 通过实体作为筛选条件模糊查询,支持分页
     *
     * @param eWarehouse 实例对象
     * @return pageInfo对象
     */
    PageInfo<EWarehouse> queryLike(EWarehouse eWarehouse, Integer pageNum, Integer pageSize);

    /**
     * 通过实体作为筛选条件模糊查询,支持分页和排序
     *
     * @param eWarehouse 实例对象
     * @return pageInfo对象
     */
    PageInfo<EWarehouse> queryLike(EWarehouse eWarehouse, Integer pageNum, Integer pageSize, String orderBy);

    /**
     * 通过字符串全属性模糊查询
     *
     * @param key 要查找的字符串
     * @return 对象列表
     */
    List<EWarehouse> search(String key);

    /**
     * 通过字符串全属性模糊查询,支持排序
     *
     * @param key 要查找的字符串
     * @return 对象列表
     */
    List<EWarehouse> search(String key, String orderBy);

    /**
     * 通过字符串全属性模糊查询,支持分页
     *
     * @param key 要查找的字符串
     * @return PageInfo对象
     */
    PageInfo<EWarehouse> search(String key, Integer pageNum, Integer pageSize);

    /**
     * 通过字符串全属性模糊查询,支持分页和排序
     *
     * @param key 要查找的字符串
     * @return PageInfo对象
     */
    PageInfo<EWarehouse> search(String key, Integer pageNum, Integer pageSize, String orderBy);

    /**
     * 新增数据
     *
     * @param eWarehouse 实例对象
     * @return 实例对象
     */
    EWarehouse insert(EWarehouse eWarehouse);

    /**
     * 新增多条数据
     *
     * @param list<EWarehouse> 对象列表
     * @return 影响行数
     */
    int insertBatch(List<EWarehouse> list);

    /**
     * 修改数据
     *
     * @param eWarehouse 实例对象
     * @return 实例对象
     */
    EWarehouse update(EWarehouse eWarehouse);

    /**
     * 通过表字段修改实体属性不为null的列
     *
     * @param where 条件实例对象
     * @param set   修改实例对象
     * @return 影响行数
     */
    int updateByField(EWarehouse where, EWarehouse set);

    /**
     * 通过主键修改实体列表，列表长度不能为0，
     * 注意：当实体属性为null时，对应的列也会别更新为null
     *
     * @param list<EWarehouse> 对象列表
     * @return 影响行数
     */
    int updateBatch(List<EWarehouse> list);

    /**
     * 通过主键删除数据
     *
     * @param warehouseId 主键
     * @return 是否成功
     */
    boolean deleteById(String warehouseId);

    /**
     * 通过实体非空属性删除
     *
     * @param eWarehouse 条件实例对象
     * @return 影响行数
     */
    int deleteByEntity(EWarehouse eWarehouse);

    /**
     * 通过多条主键删除多条数据
     *
     * @param list<String> 主键列表
     * @return 影响行数
     */
    int deleteByIds(List<String> list);

    /**
     * 通过实体非空属性计数
     *
     * @param eWarehouse 条件实例对象
     * @return 行数
     */
    int count(EWarehouse eWarehouse);

}